{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "d73019f7",
   "metadata": {},
   "source": [
    "### ALPI example \n",
    "\n",
    "* Variant ID: DEL_chr2_232375546_232379537'\n",
    "* Misexpressed gene ID: ENSG00000163295"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "30669239",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd \n",
    "import pysam \n",
    "from pathlib import Path\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "2dfb0e40",
   "metadata": {},
   "outputs": [],
   "source": [
    "wkdir = \"/lustre/scratch126/humgen/projects/interval_rna/interval_rna_seq/thomasVDS/misexpression_v3\"\n",
    "wkdir_path = Path(wkdir)\n",
    "\n",
    "vcf_path=\"/lustre/scratch126/humgen/projects/interval_rna/interval_rna_seq/thomasVDS/lof_missense/data/sv_vcf/filtered_merged_gs_svp_10728.vcf.gz\"\n",
    "sv_info_path = \"/lustre/scratch126/humgen/projects/interval_rna/interval_rna_seq/thomasVDS/lof_missense/data/sv_vcf/info_table/final_sites_critical_info_allele.txt\"\n",
    "star_pass_2_out = \"/lustre/scratch126/humgen/projects/interval_rna/interval_rna_seq_n5188_v97/results/star_pass2_2ndpass/\"\n",
    "ge_matrix_flat_path = wkdir_path.joinpath(\"2_misexp_qc/misexp_gene_cov_corr/tpm_zscore_4568smpls_8610genes_flat_misexp_corr_qc.csv\")\n",
    "wgs_rna_paired_smpls_path=wkdir_path.joinpath(\"1_rna_seq_qc/wgs_rna_match/paired_wgs_rna_postqc_prioritise_wgs.tsv\")\n",
    "\n",
    "# gene and variant \n",
    "misexp_vrnt_id ='DEL_chr2_232375546_232379537'\n",
    "misexp_gene_id = \"ENSG00000163295\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "dc3fdf52",
   "metadata": {},
   "outputs": [],
   "source": [
    "# load SV info \n",
    "sv_info_df = pd.read_csv(sv_info_path, sep=\"\\t\", dtype={\"plinkID\":str})\n",
    "# get variant ID information \n",
    "vrnt_id_info_df = sv_info_df[sv_info_df.plinkID == misexp_vrnt_id]\n",
    "chrom, start, end = [vrnt_id_info_df[col].item() for col in [\"chr\", \"pos\", \"end\"]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "c61eab0b",
   "metadata": {},
   "outputs": [],
   "source": [
    "ge_matrix_flat_df = pd.read_csv(ge_matrix_flat_path, sep=\",\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bafc732d",
   "metadata": {},
   "source": [
    "### Expression of SV carriers and non-carriers "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "93caf1a4",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Gene IDs passing filters: 8610\n",
      "RNA-seq sample IDs passing QC: 4568\n",
      "Loading input VCF ...\n",
      "VCF loaded.\n",
      "Subset VCF to samples with RNA-seq ...\n",
      "Number of samples in VCF with RNA ID and passing QC: 2640\n",
      "Number of RNA IDs passing QC: 2640\n"
     ]
    }
   ],
   "source": [
    "misexp_exp_df = ge_matrix_flat_df[ge_matrix_flat_df.gene_id == misexp_gene_id]\n",
    "# subset to SV samples \n",
    "gene_id_pass_qc_set = set(ge_matrix_flat_df.gene_id.unique())\n",
    "print(f\"Gene IDs passing filters: {len(gene_id_pass_qc_set)}\")\n",
    "smpl_id_pass_qc_set = set(ge_matrix_flat_df.rna_id.unique())\n",
    "print(f\"RNA-seq sample IDs passing QC: {len(smpl_id_pass_qc_set)}\")\n",
    "# egan ID, RNA ID sample links \n",
    "wgs_rna_paired_smpls_df = pd.read_csv(wgs_rna_paired_smpls_path, sep=\"\\t\")\n",
    "egan_ids_with_rna = wgs_rna_paired_smpls_df[wgs_rna_paired_smpls_df.rna_id.isin(smpl_id_pass_qc_set)].egan_id.tolist()\n",
    "# load VCF and subset to EGAN IDs with RNA \n",
    "print(\"Loading input VCF ...\")\n",
    "vcf_path = vcf_path\n",
    "vcf = pysam.VariantFile(vcf_path, mode = \"r\")\n",
    "print(\"VCF loaded.\")\n",
    "print(\"Subset VCF to samples with RNA-seq ...\")\n",
    "vcf_samples = [sample for sample in vcf.header.samples]\n",
    "vcf_egan_ids_with_rna = set(egan_ids_with_rna).intersection(set(vcf_samples))\n",
    "vcf.subset_samples(vcf_egan_ids_with_rna)\n",
    "vcf_samples_with_rna = [sample for sample in vcf.header.samples]\n",
    "print(f\"Number of samples in VCF with RNA ID and passing QC: {len(vcf_samples_with_rna)}\")\n",
    "# subset egan ID and RNA ID links to samples with SV calls and passing QC \n",
    "wgs_rna_paired_smpls_with_sv_calls_df = wgs_rna_paired_smpls_df[wgs_rna_paired_smpls_df.egan_id.isin(vcf_samples_with_rna)]\n",
    "# write EGAN-RNA ID pairs to file\n",
    "rna_id_pass_qc_sv_calls = wgs_rna_paired_smpls_with_sv_calls_df.rna_id.unique().tolist()\n",
    "print(f\"Number of RNA IDs passing QC: {len(rna_id_pass_qc_sv_calls)}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "4f9c8b7d",
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_rna_id_carriers(vrnt_id, chrom, start, end, wgs_rna_paired_smpls_df):\n",
    "    chrom_num = chrom.split(\"chr\")[1]\n",
    "    vrnt_gt_egan_dict, count = {}, 0\n",
    "    found_vrnt_id = False\n",
    "    for rec in vcf.fetch(chrom_num, start-1, end): \n",
    "        vcf_vrnt_id = str(rec.id)\n",
    "        if vrnt_id == vcf_vrnt_id:\n",
    "            found_vrnt_id = True \n",
    "            # collect genotypes\n",
    "            gts = [s[\"GT\"] for s in rec.samples.values()]\n",
    "            for i, gt in enumerate(gts): \n",
    "                vrnt_gt_egan_dict[count] = [vrnt_id, vcf_samples_with_rna[i], gt]\n",
    "                count += 1 \n",
    "    if not found_vrnt_id: \n",
    "        raise ValueError(f\"Did not find {vrnt_id} in {vcf_path}\")\n",
    "    vrnt_gt_egan_df = pd.DataFrame.from_dict(vrnt_gt_egan_dict, orient=\"index\", columns=[\"vrnt_id\", \"egan_id\", \"genotype\"])\n",
    "    egan_id_carriers = vrnt_gt_egan_df[vrnt_gt_egan_df.genotype != (0, 0)].egan_id.unique()\n",
    "    rna_id_carriers = wgs_rna_paired_smpls_df[wgs_rna_paired_smpls_df.egan_id.isin(egan_id_carriers)].rna_id.unique()\n",
    "    if len(egan_id_carriers) != len(rna_id_carriers): \n",
    "        raise ValueError(\"Number of RNA and DNA samples does not match.\")\n",
    "    return rna_id_carriers"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "09d133cc",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of carriers with RNA: 6\n"
     ]
    }
   ],
   "source": [
    "rna_id_carriers = get_rna_id_carriers(misexp_vrnt_id, chrom, start, end, wgs_rna_paired_smpls_df)\n",
    "print(f\"Number of carriers with RNA: {len(rna_id_carriers)}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "ee8e85b0",
   "metadata": {},
   "outputs": [],
   "source": [
    "misexp_exp_sv_carriers_df = misexp_exp_df[misexp_exp_df.rna_id.isin(rna_id_pass_qc_sv_calls)].copy()\n",
    "misexp_exp_sv_carriers_df[\"status\"] = np.where(misexp_exp_sv_carriers_df.rna_id.isin(rna_id_carriers), \"Carrier\", \"Non-carrier\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "14acb1e2",
   "metadata": {},
   "outputs": [],
   "source": [
    "misexp_exp_sv_carriers_df[\"misexp\"] = np.where((misexp_exp_sv_carriers_df.TPM > 0.5) & (misexp_exp_sv_carriers_df[\"z-score\"] > 2), \"Misexpressed\", \"Not-misexpressed\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "86c05fd5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAokAAAHpCAYAAADuy6bmAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdeVxV1f7/8fcBZFAEVBRFQTFFcVb8WWiZ5gDm17RJK6+KQ2ml5tiNLKcGsrLMSu/NHPJbOeSU5VwOOJuoaWo4iwNkTuAECOzfH349dTog5xSHA/h6Ph7ncdtrTx8O1n271l5rmwzDMAQAAAD8iYuzCwAAAEDhQ0gEAACAFUIiAAAArBASAQAAYIWQCAAAACuERAAAAFghJAIAAMDKXRcSDcNQamqqWB4SAAAgd3ddSLxy5Yp8fX115coVZ5cCAABQaN11IREAAAB5IyQCAADACiERAAAAVgiJAAAAsEJIBAAAgBVCIgAAAKwQEgEAAGCFkAgAAAArhEQAAABYISQCAADACiERAAAAVgiJAAAAsEJIBAAAgBVCIgAAAKwQEgGgIN28cesDAIWcm7MLAIC7wuVEafnL0uFVkkxSaJTUYYLkF+TsygAgR4REAHC0zAzpi0ekS8f/aEtYJv3+q/TiDsmV/xQDKHwYbgYAR0tYZhkQb7t4VDq0ouDrAQAbEBIBwNEunfx7+wDAiQiJAOBogY3vsK9RwdUBAHYgJAKAo1V/UAp50Lr9noekavcXfD0AYAOelgaAgvDMPGnLJ9KBJZJMUt3OUsQgZ1cFALkyGYZhOLuIgpSamipfX1+lpKTIx8fH2eUAAAAUSgw3AwAAwAohEQAAAFYIiQAAALBCSAQAAIAVQiIAAACsEBIBAABghZAIAAAAK4REAAAAWCEkAgAAwAohEQAAAFYIiQAAALBCSAQAAIAVQiIAAACsEBIBAABghZAIAAAAK4REAAAAWCEkAgAAwAohEQAAAFYIiQAAALBCSAQAAIAVQiIAAACsEBIBAABghZAIAAAAK4REAAAAWCEkAgAAwAohEQAAAFYIiQAAALBCSAQAAIAVQiIAAACsEBIBAABgxakhMS4uTp06dVJgYKBMJpOWLFlyx+MXLVqkdu3aqXz58vLx8VFERIRWrVpVQNUCAADcPZwaEq9du6aGDRvqk08+sen4uLg4tWvXTsuXL1d8fLxat26tTp06affu3Q6uFAAA4O5iMgzDcHYRkmQymbR48WJ16dLFrvPq1q2rbt26afTo0TYdn5qaKl9fX6WkpMjHx+fvlAoAAFDsuTm7gH8iOztbV65cUdmyZXM9Jj09Xenp6ebt1NTUgigNAACgSCvSE1cmTpyoa9euqWvXrrkeExsbK19fX/MnKCioACsEAAAomopsSJwzZ47Gjh2refPmqUKFCrkeFxMTo5SUFPPn1KlTBVglAABA0VQkh5vnzZunvn376ptvvlHbtm3veKyHh4c8PDwKqDIAAIDiocj1JM6ZM0fR0dH6+uuv1bFjR2eXAwAAUCw5tSfx6tWrOnLkiHn7+PHj2rNnj8qWLavg4GDFxMTozJkzmj17tqRbAbFnz5766KOPdN999yk5OVmS5OXlJV9fX6f8DAAAAMWRU5fAWb9+vVq3bm3V3qtXL82aNUvR0dE6ceKE1q9fL0lq1aqVNmzYkOvxtmAJHAAAgLwVmnUSCwohEQAAIG9F7plEAAAAOB4hEQAAAFYIiQAAALBCSAQAAIAVQiIAAACsEBIBAABghZAIAAAAK4REAAAAWCEkAgAAwAohEQAAAFYIiQAAALBCSAQAAIAVQiIAAACsEBIBAABghZAIAAAAK4REAAAAWCEkAgAAwAohEQAAAFYIiQAAALBCSAQAAIAVQiIAAACsEBIBAABghZAIAAAAK4REAAAAWCEkAgAAwAohEQAAAFYIiQAAALBCSAQAAIAVQiIAAACsEBIBAABghZAIAAAAK4REACiKrp6TkvZKN284uxIAxZSbswsAANgh47r03UvSLwslI0vyKiO1ipHu7e/sygAUM/QkAkBRsuJlad/8WwFRkm5cutWWsNK5dQEodgiJAFBUpF+V9s7Ped/OGQVbC4Bij5AIAEVFeqqUlZ7zvmvnCrYWAMUeIREAiorSlaSy9+S8r9r9BVsLgGKPkAgARYXJJEW+Jbn8Zc6hb7AUMcg5NQEotkyGYRjOLqIgpaamytfXVykpKfLx8XF2OQBgv6SfpZ8+l1LOSEHNpP/XTyrl7+yqABQzhEQAAABYYbgZAAAAVgiJAAAAsEJIBAAAgBVCIgAAAKwQEgEAAGCFkAgAAAArhEQAAABYISQCAADAilNDYlxcnDp16qTAwECZTCYtWbIkz3M2bNig8PBweXp6qnr16vrPf/5TAJUCQCFx/oj0w1hp6SDpl4VSVqazKwJQTDk1JF67dk0NGzbUJ598YtPxx48f18MPP6wHHnhAu3fv1quvvqrBgwdr4cKFDq4UAAqBA99KU+6TNn0o7ZotLegjffW4lJnh7MoAFEOF5rV8JpNJixcvVpcuXXI95t///reWLl2qgwcPmtsGDBign3/+WVu3bs3xnPT0dKWnp5u3U1NTFRQUxGv5ABQtWTelD+tKV3+z3td5itS4e8HXBKBYK1LPJG7dulXt27e3aIuMjNTOnTt18+bNHM+JjY2Vr6+v+RMUFFQQpQJA/kr6OeeAKEmHVxVsLQDuCkUqJCYnJysgIMCiLSAgQJmZmTp//nyO58TExCglJcX8OXXqVEGUCgD5y907930epQuuDgB3DTdnF2Avk8lksX17tPyv7bd5eHjIw8PD4XUBgENVqC1VDpfOxFvva8RQM4D8V6R6EitWrKjk5GSLtnPnzsnNzU3lypVzUlUAUECemCEF1Ptju0RJKTJWqtrceTUBKLaKVE9iRESEvvvuO4u21atXq2nTpipRooSTqgKAAlKmmvT8Zun0Tun6RSmomeTl5+yqABRTTu1JvHr1qvbs2aM9e/ZIurXEzZ49e5SYmCjp1vOEPXv2NB8/YMAAnTx5UsOGDdPBgwc1Y8YMTZ8+XSNGjHBK/QDgFFWaSqHtCYgAHMqpPYk7d+5U69atzdvDhg2TJPXq1UuzZs1SUlKSOTBKUkhIiJYvX66hQ4fq008/VWBgoCZPnqzHH3+8wGsHAAAozgrNOokFJTU1Vb6+vqyTCAAAcAdFauIKAAAACoZdw80pKSlavHixNm7cqBMnTuj69esqX768GjdurMjISDVvzgw7AACA4sCmnsSkpCQ9++yzqlSpksaPH69r166pUaNGatOmjapUqaJ169apXbt2qlOnjubNm+fomgEAAOBgNvUkNmzYUD179tSOHTtUr169HI+5ceOGlixZog8++ECnTp1ixjEAAEARZtPEld9//13ly5e3+aL2Hl+QmLgCAACQN5uGm+0NfIU1IAIAAMA2Nk9ciYuLs+m4li1b/u1iAAAAUDjYvE6ii4uLTCaTJCm3U0wmk7KysvKvOgdguBkAACBvNvcklilTRqVLl1Z0dLR69Oghf39/R9YFAAAAJ7J5Me2kpCRNmDBBW7duVf369dW3b19t2bJFPj4+8vX1NX8AAABQ9NkcEt3d3dWtWzetWrVKCQkJatCggQYOHKigoCCNGjVKmZmZjqwTAAAABegfvbv5+PHj6tu3rzZs2KDff/9dZcuWzc/aHIJnEgEAAPJm97ub09PT9fXXX6tt27aqV6+e/P39tWzZsiIREAEAAGAbmyeu7NixQzNnztTcuXMVEhKi6OhozZ8/n3AIAABQDNm1BE5wcLB69eql8PDwXI975JFH8q04R2C4GQAAIG92hcQ8L8Y6iQAAAMWCzcPN2dnZjqwDAAAAhcjfmrhy7do1R9QCAACAQsLmkHj+/Hl17NhR3t7e8vHxUfPmzXXs2DFH1gYAAAAnsTkkxsTEKD4+XuPGjdN7772n8+fPq3///o6sDQAAAE5i88SV4OBg/ec//9HDDz8sSfr1119Vr1493bhxQyVKlHBokfmJiSsAAAB5s7kn8ezZs2rcuLF5u3bt2nJ3d9fZs2cdUhgAAACcx+aQaBiG3NwsJ0O7ubkx6xkAAKAYsnkJHMMw1KZNG4ugeP36dXXq1Enu7u7mtl27duVvhQAAAChwNofEMWPGWLV17tw5X4sBAABA4WDzxJXExERVqVLFpjevFGZMXAEAAMibzYkvJCRE58+fd2QtAAAAKCTsmrgCAACAu0PRHjsGAACAQ9g8cUWSPv/8c3l7e9/xmMGDB/+jggAAAOB8Nk9ccXFxUZUqVeTq6pr7xUymQv8+ZyauAAAA5M2unsSdO3eqQoUKjqoFAAAAhYTNzySaTCZH1gEAAIBChNnNAAAAsGJzSBwzZkyek1YAAABQPNg0cSUxMVHBwcE2X/TMmTOqXLnyPyrMUZi4AgAAkDebehL/3//7f3ruuee0Y8eOXI9JSUnRtGnTVK9ePS1atCjfCgQAAEDBs2l288GDB/X2228rKipKJUqUUNOmTRUYGChPT09dunRJBw4c0P79+9W0aVO999576tChg6PrBgAAgAPZvE6iJKWlpWn58uXauHGjTpw4oRs3bsjf31+NGzdWZGSk6tWr58ha8wXDzQAAAHmzKyQWB4REAACAvPHuZgAAAFghJAIAAMAKIREAAABWCIkAAACwQkgEAACAFZvWSfyrQ4cOaf369Tp37pyys7Mt9o0ePTpfCgMAAIDz2L0EzrRp0/T888/L399fFStWlMlk+uNiJpN27dqV70XmJ5bAAQAAyJvdw81vvvmm3nrrLSUnJ2vPnj3avXu3+fN3AuKUKVMUEhIiT09PhYeHa+PGjXc8/quvvlLDhg1VsmRJVapUSb1799aFCxfsvi8AAAByZ3dIvHTpkp588sl8ufm8efM0ZMgQjRo1Srt379YDDzygDh06KDExMcfjN23apJ49e6pv377av3+/vvnmG/3000/q169fvtQDAACAW+wOiU8++aRWr16dLzf/4IMP1LdvX/Xr109hYWGaNGmSgoKCNHXq1ByP37Ztm6pVq6bBgwcrJCRE999/v/r376+dO3fmeo/09HSlpqZafAAAAHBndk9cqVGjhl5//XVt27ZN9evXV4kSJSz2Dx482KbrZGRkKD4+Xq+88opFe/v27bVly5Ycz2nevLlGjRql5cuXq0OHDjp37pwWLFigjh075nqf2NhYjRs3zqaaAAAAcIvdE1dCQkJyv5jJpGPHjtl0nbNnz6py5cravHmzmjdvbm5/++239cUXXyghISHH8xYsWKDevXsrLS1NmZmZeuSRR7RgwQKrsHpbenq60tPTzdupqakKCgpi4goAAMAd2N2TePz48Xwt4M+zoyXJMAyrttsOHDigwYMHa/To0YqMjFRSUpJGjhypAQMGaPr06Tme4+HhIQ8Pj3ytGQAAoLj7W+sk3na7EzK3UHcn/v7+cnV1VXJyskX7uXPnFBAQkOM5sbGxatGihUaOHClJatCggUqVKqUHHnhAb775pipVqmR3HQAAALD2t964Mnv2bNWvX19eXl7y8vJSgwYN9L//+792XcPd3V3h4eFas2aNRfuaNWsshp//7Pr163JxsSzZ1dVV0h+BFQAKpcwMKX6W9PVT0je9pYSVzq4IAO7I7p7EDz74QK+//roGDhyoFi1ayDAMbd68WQMGDND58+c1dOhQm681bNgw9ejRQ02bNlVERIQ+++wzJSYmasCAAZKkmJgYnTlzRrNnz5YkderUSc8++6ymTp1qHm4eMmSImjVrpsDAQHt/FAAoGNnZ0pynpKM//tG2f5HUcqT00GvOqwsA7sDukPjxxx9r6tSp6tmzp7mtc+fOqlu3rsaOHWtXSOzWrZsuXLig8ePHKykpSfXq1dPy5ctVtWpVSVJSUpLFmonR0dG6cuWKPvnkEw0fPlx+fn566KGHNGHCBHt/DAAoOIdWWgbE2zZ9KDXtK/nwqAyAwsfu2c2enp765ZdfVKNGDYv2w4cPq379+kpLS8vXAvMbr+UDUOBWxkjbpuS874kZUr3HC7YeALCB3c8k1qhRQ/Pnz7dqnzdvnmrWrJkvRQFAsVLK/w77KhRcHQBgB7uHm8eNG6du3bopLi5OLVq0kMlk0qZNm/Tjjz/mGB4B4K7X8Gkp7n3p5nXLdv9Qqdr9zqkJAPJgd0/i448/ru3bt8vf319LlizRokWL5O/vrx07dujRRx91RI0AULT5BEpPz5H8qv7RVqWZ9Mx86W8sIQYABcHuZxKLOp5JBOA02dnSuQNSCS+p3D3OrgYA7sim4ebU1FRzoEpNTb3jsQQvAMiFi4tUsZ6zqwAAm9gUEsuUKaOkpCRVqFBBfn5+Ob5h5fbr9LKysvK9SAAAABQsm0Li2rVrVbZsWUnSunXrHFoQAAAAnI9nEgEAAGDF7tnNK1eu1KZNm8zbn376qRo1aqRnnnlGly5dytfiAAAA4Bx2h8SRI0eaJ6/s27dPw4YN08MPP6xjx45p2LBh+V4gAAAACp7di2kfP35cderUkSQtXLhQnTp10ttvv61du3bp4YcfzvcCAQAAUPDs7kl0d3fX9eu33hrwww8/qH379pKksmXL5rk8DgAAAIoGu3sS77//fg0bNkwtWrTQjh07NG/ePEnSoUOHVKVKlXwvEAAAAAXP7p7ETz75RG5ublqwYIGmTp2qypUrS5JWrFihqKiofC8QAAAABY8lcAAAAGDF7p7EXbt2ad++febtb7/9Vl26dNGrr76qjIyMfC0OAAAAzmF3SOzfv78OHTokSTp27JieeuoplSxZUt98841efvnlfC8QAAAABc/ukHjo0CE1atRIkvTNN9+oZcuW+vrrrzVr1iwtXLgw3wsEAABAwbM7JBqGoezsbEm3lsC5vTZiUFCQzp8/n7/VAQAAwCnsDolNmzbVm2++qf/93//Vhg0b1LFjR0m3FtkOCAjI9wIBAABQ8OwOiZMmTdKuXbs0cOBAjRo1SjVq1JAkLViwQM2bN8/3AgEAAFDw8m0JnLS0NLm6uqpEiRL5cTmHYQkcAACAvNndkyhJly9f1ueff66YmBhdvHhRknTgwAGdO3cuX4sDAACAc9j9Wr69e/eqTZs28vPz04kTJ/Tss8+qbNmyWrx4sU6ePKnZs2c7ok4AAAAUILt7EocNG6bevXvr8OHD8vT0NLd36NBBcXFx+VocAAAAnMPukPjTTz+pf//+Vu2VK1dWcnJyvhQFAAAA57I7JHp6eio1NdWqPSEhQeXLl8+XogAAQPG2fv16mUwmXb582dmlIBd2h8TOnTtr/PjxunnzpiTJZDIpMTFRr7zyih5//PF8LxAAABQ/zZs3V1JSknx9fZ1dCnJh9xI4qampevjhh7V//35duXJFgYGBSk5OVkREhJYvX65SpUo5qtZ8wRI4AAAAebO7J9HHx0ebNm3SwoUL9c4772jgwIFavny5NmzYUOgDIgAAcIxWrVpp0KBBGjJkiMqUKaOAgAB99tlnunbtmnr37q3SpUvrnnvu0YoVKyRZDzefPHlSnTp1UpkyZVSqVCnVrVtXy5cvN1//wIEDevjhh+Xt7a2AgAD16NHD/Drg9evXy93dXRs3bjQfP3HiRPn7+yspKclc38CBAzVw4ED5+fmpXLlyeu2115RPy0UXS3aFxMzMTLm5uemXX37RQw89pBEjRujll19W27ZtHVUfAAAoIr744gv5+/trx44dGjRokJ5//nk9+eSTat68uXbt2qXIyEj16NFD169ftzr3xRdfVHp6uuLi4rRv3z5NmDBB3t7ekqSkpCQ9+OCDatSokXbu3KmVK1fqt99+U9euXSXdCoBDhgxRjx49lJKSop9//lmjRo3StGnTVKlSJYv63NzctH37dk2ePFkffvihPv/884L5coogu4eb77nnHi1atEgNGzZ0VE0OxXAzAAD5r1WrVsrKyjL35mVlZcnX11ePPfaYeQ3l5ORkVapUSVu3blVaWppat26tS5cuyc/PTw0aNNDjjz+uMWPGWF179OjR2r59u1atWmVuO336tIKCgpSQkKDQ0FBlZGTovvvuU82aNbV//35FRERo2rRpFvWdO3dO+/fvl8lkkiS98sorWrp0qQ4cOODIr6bIsnu4+bXXXrN40woAAIAkNWjQwPzPrq6uKleunOrXr29uCwgIkKQc39A2ePBgvfnmm2rRooXGjBmjvXv3mvfFx8dr3bp18vb2Nn9q164tSTp69Kgkyd3dXV9++aUWLlyoGzduaNKkSVb3uO+++8wBUZIiIiJ0+PBhZWVl/cOfvHiy+40rkydP1pEjRxQYGKiqVataPYe4a9eufCsOAAAUHSVKlLDYNplMFm23A1p2drbVuf369VNkZKSWLVum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jBmDRYsWQalUwsfHBwkJCdi6dStcXV2xceNGrF+/HkqlErt27Xrs46haqnfv3khKSoJarYavry+USiXmz58PS0tLzcglEVFTZELXhWZERERE1KnxX0oiIiIikmCSSEREREQSTBKJiIiISIJJIhERERFJMEkkIiIiIgkmiUREREQkwSSRiIiIiCSYJBIRERGRBJNEog4mLy8PMpkM6enp+g6FiIieY0wSidpYcXEx5s6dCycnJ8jlcigUCkyYMAEJCQltsj+FQoGioiIolcpW7/vOnTv47LPP4OTkBBMTE9jY2MDb2xuHDh3S1HFwcMBXX33V4r69vb2xYMGC1gyXiIiegqG+AyDqyPLy8jBq1Ch0794dGzZswNChQ1FXV4effvoJQUFBuHTp0hP1q1arIZPJJOvw1tbWwtjYGLa2tk8V94N+HhUYGIjTp0/j66+/houLC8rKynDy5EmUlZU91f6IiOgZJIiozYwbN07Y2dmJ27dvS7ZVVFRo3oeFhQmlUim6desm+vTpI2bNmiWqq6s123fs2CEsLS3FwYMHxaBBg4SBgYHIyckR9vb2IiQkRMyYMUNYWFgIf39/kZubKwCIs2fPatpnZGSIcePGCVNTU9GzZ0/x4Ycfips3b2q2e3l5iaCgILFw4UJhbW0tRo8erfN4LC0tRVRUVKPH6+XlJQBovYQQorS0VEydOlXY2dmJrl27CqVSKXbv3q1pN2PGDEm73NxczXE/7MCBA+LhX13p6enC29tbmJmZCXNzc+Hm5iZSUlIajZGIiJqH081EbaS8vBxxcXEICgqCqampZHv37t0177t06YJNmzbhwoULiI6ORmJiIpYsWaJVv6amBqGhodi+fTsyMjLQs2dPAMAXX3wBpVKJtLQ0rFixQrKfoqIieHl5wdXVFampqYiLi8ONGzcwefJkrXrR0dEwNDREUlISIiIidB6Tra0tYmNjUV1drXP7/v370adPH6xevRpFRUUoKioCANy7dw/u7u44dOgQLly4gD/96U+YPn06kpOTAQD/+Mc/4OHhgU8++UTTTqFQNPbVapk2bRr69OmDlJQUpKWlYenSpTAyMmpWWyIiahynm4naSHZ2NoQQGDhwYJN1H74Wz9HRESEhIZg1axbCw8M15XV1dQgPD8ewYcO02r7++utYvHix5nNeXp7W9q1bt8LNzQ1r167VlEVGRkKhUODKlStwdnYGAPTv3x8bNmx4bJzffPMNpk2bBmtrawwbNgyvvfYa3n33XYwaNQoAYGVlBQMDA5ibm2tNedvZ2WnFOHfuXMTFxeFf//oXRowYAUtLSxgbG6Nbt24tniovKCjAp59+qvmeBwwY0KL2RESkG0cSidqIEAIAIJPJmqx75MgR+Pj4wM7ODubm5vD390dZWRnu3LmjqWNsbIyhQ4dK2g4fPvyxfaelpeHIkSMwMzPTvB4kVFevXm12PwAwevRo5OTkICEhAe+88w4yMjLg6emJkJCQx7ZTq9X429/+hqFDh8La2hpmZmaIj49HQUFBk/tsSnBwMD7++GO88cYbWLdundYxERHRk2OSSNRGBgwYAJlMhszMzMfWy8/Ph5+fH5RKJWJiYpCWloYtW7YAaBg9fKBr1646E05dU9kPq6+vx4QJE5Cenq71ysrKwujRo5vdzwNGRkbw9PTE0qVLER8fj9WrVyMkJAS1tbWNtgkLC8OXX36JJUuWIDExEenp6fD19X1sG6BhGv5Bsv3Aw98JAKxatQoZGRkYP348EhMT4eLiggMHDjTrWIiIqHFMEonaiJWVFXx9fbFlyxatEcEHbt26BQBITU2FSqVCWFgYRo4cCWdnZ1y/fr3V4nBzc0NGRgYcHBzQv39/rVdzE8PHcXFxgUqlwr179wA0jHiq1WqtOsePH8fEiRPx4YcfYtiwYXByckJWVpZWHV3tbGxsUF1drfX96Xr+o7OzMxYuXIj4+Hi8/fbb2LFjx1MfFxFRZ8ckkagNhYeHQ61W45VXXkFMTAyysrKQmZmJTZs2wcPDAwDQr18/qFQqbN68GTk5Odi5cye2bdvWajEEBQWhvLwc77//Pk6fPo2cnBzEx8dj5syZkqSsKd7e3oiIiEBaWhry8vIQGxuL5cuXY8yYMbCwsADQ8JzEn3/+GdeuXUNpaSmAhusdDx8+jJMnTyIzMxN//vOfUVxcrNW3g4MDkpOTkZeXh9LSUtTX12PEiBHo1q0bli9fjuzsbOzevRtRUVGaNnfv3sWcOXNw9OhR5OfnIykpCSkpKRg0aNDTfWlERMQkkagtOTo64syZMxgzZgwWLVoEpVIJHx8fJCQkYOvWrQAAV1dXbNy4EevXr4dSqcSuXbsQGhraajH07t0bSUlJUKvV8PX1hVKpxPz582FpaSl5zmJTfH19ER0djbFjx2LQoEGYO3cufH19sW/fPk2d1atXIy8vD/369YONjQ0AYMWKFXBzc4Ovry+8vb1ha2uLSZMmafW9ePFiGBgYwMXFBTY2NigoKICVlRW+++47xMbGYsiQIdizZw9WrVqlaWNgYICysjL4+/vD2dkZkydPxrhx4/D5558/+RdGREQAAJl49IIfIiIiIur0OJJIRERERBJMEomIiIhIgkkiEREREUkwSSQiIiIiCSaJRERERCTBJJGIiIiIJJgkEhEREZEEk0QiIiIikmCSSEREREQSTBKJiIiISIJJIhERERFJ/H9djRpXfS6nMAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 674.75x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "ax = sns.catplot(data=misexp_exp_sv_carriers_df, \n",
    "           x=\"status\", \n",
    "            y=\"TPM\", \n",
    "                 hue=\"misexp\"\n",
    "           )\n",
    "ax.set(ylabel=\"ROPN1B Expression (TPM)\", xlabel=\"Carrier Status\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "69dbe4db",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
